package 第三章运算符;

/*
    逻辑运算符：
    &   逻辑与     （两边都为true，则为true）
    |   逻辑或     （只要有一边为true，则为true）
    !   逻辑非     （取反，！true为false，！false为真）
    ^   逻辑异或   （两边相异，结果为true）

    &&  短路与     运算结果和逻辑与运算结果相同，但存在短路现象
    ||  短路或     运算结果和逻辑或运算结果相同，但存在短路现象

    1、逻辑运算符要求两边的算子都是布尔类型，并且逻辑运算符最终的运算结果也是布尔类型
    2、短路现象及使用条件
        从效率的角度来看，短路更加智能，由于后面的代码无需执行，所以效率较高，在实际开发中常用，
        但在某些必须执行两边算子的条件下，不能使用短路。

 */
public class Operator03 {
    public static void main(String[] args) {
        System.out.println(5 > 3 & 5 > 2);  //true
        System.out.println(5 > 3 | 5 > 2);  //true
        System.out.println(5 > 3 & 5 > 6);  //false

        System.out.println(true & true);    //true
        System.out.println(true & false);    //false
        System.out.println(false & true);    //false
        System.out.println(false & false);   //false

        System.out.println(true | false);   //true
        System.out.println(false | false);   //false

        System.out.println(!false);         //trues
        System.out.println(!true);          //true

        System.out.println(true ^ false);     //true
        System.out.println(false ^ false);    //fasle
        System.out.println(true ^ true);      //false

        //逻辑与 短路与

        int x = 10;
        int y = 8;
        System.out.println(x < y && ++x < y);    //短路与，当左边为false时，右边语句无需执行，所以++x没有执行，称为短路现象
        System.out.println(x);                      //10

        //逻辑或 短路或
        //短路或，当左边为true时，右侧语句无需执行，称为短路现象
    }
}
